Computer systems typically include a combination of computer hardware (such as semiconductors, circuit boards, processors, and storage devices) and computer programs. The computer programs are stored in the storage devices and are executed by the processors. As the sophistication and complexity of computer programs increase, the programs become more difficult to debug. Bugs are problems, faults, or errors in a computer program. Locating, analyzing, and correcting suspected faults in a computer program is a process known as “debugging.” Typically, a programmer uses another computer program commonly known as a “debugger” to debug the program under development.
Conventional debuggers typically support three primary types of operations, which a computer programmer may request via a user interface. A first type is a breakpoint operation, which permits a programmer to identify with a breakpoint a precise instruction at which to halt execution of the program by the processor. As a result, when a program is executed by the debugger, the program executes on the processor in a normal fashion until the breakpoint is reached, at which time the debugger halts execution of the program. A second type is a step operation, which permits a computer programmer to cause the processor to execute instructions in a program either one-by-one or in groups. After each instruction or group of instructions are executed, the debugger then halts execution of the program. Once the execution of the program is halted, either by step or breakpoint operations, conventional debuggers provide a third type of operation, which displays the content that is stored at various storage locations, in response to requests by the programmer. By this debugging process of halting the program at various instructions and examining the content of various storage locations, the programmer might eventually find the storage location whose stored content is incorrect or unexpected.